<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8" />
    <title>3.类中方法this指向</title>
</head>

<body>
    <script type="text/javascript">
        class Person {
            constructor(name, age) {
                this.name = name;
                this.age = age;
            }
            study() {
                //study方法放在哪里?--Person类的原型对象上,供实例使用
                // 通过Person实例调用study时,study中的this就是Persion实例
                //类中所有的函数方法都默认开启严格模式和babel没关系,
                //除非通过实例调用study方法,this指向实例自身,否则不通过实例调用study方法时,this指向undefined
                console.log("first", this)
            }
        }
        const p1 = new Person('tom', 18)
        console.log(p1)
        p1.study()
        const x = p1.study; //将study函数直接赋值给变量x
        x() //此处相当于直接调用study函数 其中this本来应该指向window,但是类中方法默认开启严格模式导致thi指向undefined

        //示例
        //函数内部是可以开启严格模式的 'use strict'
        // function demo() {
        //     console.log("demo", this)
        // }
        // demo()

        // function demo2() {
        //     "use strict" //方法内部是可以开启局部严格模式的
        //     console.log("demo2", this)
        // }
        // demo2()
    </script>
</body>

</html>